﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;
using DevExpress.Utils;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Views.Grid;
using QuanLyKho.DKChung;

namespace QuanLyKho.PhongCat
{
    public partial class TaoPhieuYeuCau : Form
    {
        public static string MaID = "0";
        public static string IdLenh = "0";
        public static string IdSanPham = "0";

        public TaoPhieuYeuCau()
        {
            InitializeComponent();
            SetForm();
            if (MaID != "0")
                LoadFormUpdate();
            else
                LoadFormInsert();
        }

        private void SetForm()
        {
            // Loại phiếu
            DataTable dtLoaiPhieuYeuCau = new DataTable("dsSiNO");
            dtLoaiPhieuYeuCau.Columns.Add("LoaiPhieu", typeof(string));
            dtLoaiPhieuYeuCau.Columns.Add("Value", typeof(int));
            dtLoaiPhieuYeuCau.Rows.Add(Common.HienThiLoaiPhieuYeuCau(Convert.ToInt32(LoaiPhieuYeuCau.CapThem)), Convert.ToInt32(LoaiPhieuYeuCau.CapThem));
            dtLoaiPhieuYeuCau.Rows.Add(Common.HienThiLoaiPhieuYeuCau(Convert.ToInt32(LoaiPhieuYeuCau.TraLai)), Convert.ToInt32(LoaiPhieuYeuCau.TraLai));
            dtLoaiPhieuYeuCau.Rows.Add(Common.HienThiLoaiPhieuYeuCau(Convert.ToInt32(LoaiPhieuYeuCau.HuySanPham)), Convert.ToInt32(LoaiPhieuYeuCau.HuySanPham));

            luPhieuYeuCau.Properties.DataSource = dtLoaiPhieuYeuCau;
            luPhieuYeuCau.Properties.Columns.Add(new LookUpColumnInfo("Value"));
            luPhieuYeuCau.Properties.Columns.Add(new LookUpColumnInfo("LoaiPhieu"));
            luPhieuYeuCau.Properties.DisplayMember = "LoaiPhieu";
            luPhieuYeuCau.Properties.ValueMember = "Value";
            luPhieuYeuCau.Properties.Columns["Value"].Visible = false;
            luPhieuYeuCau.Properties.NullText = "--- Chọn loại phiếu ---";
            luPhieuYeuCau.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;
            luPhieuYeuCau.Properties.ShowHeader = false;

            // Vật tư trên lưới
            luMaVatTu.Properties.DataSource = DataAll.SelectAll("Kho_VatTu", "IDVatTu,MaVatTu,TenVatTu,DonVi", "");
            luMaVatTu.Properties.Columns.Add(new LookUpColumnInfo("MaVatTu"));
            luMaVatTu.Properties.Columns.Add(new LookUpColumnInfo("IDVatTu"));
            luMaVatTu.Properties.Columns.Add(new LookUpColumnInfo("TenVatTu"));
            luMaVatTu.Properties.Columns.Add(new LookUpColumnInfo("DonVi"));
            luMaVatTu.Properties.DisplayMember = "MaVatTu";
            luMaVatTu.Properties.ValueMember = "IDVatTu";
            luMaVatTu.Properties.NullText = "--- Chọn vật tư ---";
            luMaVatTu.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;
            luMaVatTu.Properties.ShowHeader = false;
            luMaVatTu.Properties.Columns["IDVatTu"].Visible = false;
            luMaVatTu.Properties.Columns["DonVi"].Visible = false;

            gcSoLuong.DisplayFormat.FormatType = FormatType.Numeric;
            gcSoLuong.DisplayFormat.FormatString = "{0:0,0.00}";

            gcXoa.Width = 10;
            gcID.Visible = false;
        }

        private void LoadFormInsert()
        {
            // đổ dữ liệu lên form theo lệnh và sản phẩm
            if (IdLenh != "0" && IdSanPham != "0")
            {
                DataTable dt = DataAll.SelectAll("LenhSanXuat inner join PhongMau_SanPham On LenhSanXuat.IdSanPham = PhongMau_SanPham.IdSanPham",
                "PhongMau_SanPham.[LoaiHang],PhongMau_SanPham.[LanSanXuat],PhongMau_SanPham.[LenhSanXuat],LenhSanXuat.[ID],PhongMau_SanPham.[MaHang] as MaSanPham,LenhSanXuat.[IdSanPham],[NgayLapLenh],[NguoiLapLenh],LenhSanXuat.[SoLuong],[NgayGuiLenh],[NgaySuaLenh],[NgayDuyetLenh],LenhSanXuat.[TrangThai],[NgayChungTu],[NgayHoachToan],LenhSanXuat.[SoChungTu],LenhSanXuat.[GhiChu],[KhoDen],[KhoDi],[SXTuNgay],[SXDenNgay]",
                    "WHERE LenhSanXuat.[ID] = " + IdLenh);
                dtNgayLapLenh.Value = Convert.ToDateTime(dt.Rows[0]["NgayLapLenh"]);
                txtSoLuong.Text = dt.Rows[0]["SoLuong"].ToString();
                txtGhiChu.Text = dt.Rows[0]["GhiChu"].ToString();
                dtNgayChungTu.Value = Convert.ToDateTime(dt.Rows[0]["NgayChungTu"]);
                dtNgayHachToan.Value = Convert.ToDateTime(dt.Rows[0]["NgayHoachToan"]);
                txtChungtu.Text = dt.Rows[0]["SoChungTu"].ToString();
                dtSXTuNgay.Value = Convert.ToDateTime(dt.Rows[0]["SXTuNgay"]);
                dtSXDenNgay.Value = Convert.ToDateTime(dt.Rows[0]["SXDenNgay"]);
                IdSanPham = dt.Rows[0]["IdSanPham"].ToString();
                txtMaSP.Text = dt.Rows[0]["MaSanPham"].ToString();
                txtLoaiHang.Text = dt.Rows[0]["LoaiHang"].ToString();
                txtLanTai.Text = dt.Rows[0]["LanSanXuat"].ToString();
                txtSoLenh.Text = dt.Rows[0]["LenhSanXuat"].ToString();
                LoadImage();
            }
            var dataColumns = new DataTable();
            dataColumns.Columns.Add("ID");
            dataColumns.Columns.Add("Mã vật tư");
            dataColumns.Columns.Add("TenVatTu");
            dataColumns.Columns.Add("DonVi");
            dataColumns.Columns.Add("SoLuong", typeof(double));
            dataColumns.Columns.Add("GhiChu");

            for (int i = 0; i < 1; i++)
            {
                dataColumns.Rows.Add("");
            }
            gridChiTiet.DataSource = null;
            gridChiTiet.DataSource = dataColumns;
        }

        private void LoadFormUpdate()
        {
            // đổ dữ liệu lên form theo lệnh và sản phẩm

            var dt = DataAll.SelectAll("PhieuYeuCau inner join PhongMau_SanPham on PhieuYeuCau.IdSanPham = PhongMau_SanPham.IdSanPham",
               "PhongMau_SanPham.[SoLuong],PhongMau_SanPham.[TuNgay],PhongMau_SanPham.[DenNgay],PhongMau_SanPham.[MaHang] as MaSanPham,PhongMau_SanPham.[NgayLL],PhongMau_SanPham.[LoaiHang],PhongMau_SanPham.[LanSanXuat],PhongMau_SanPham.[LenhSanXuat],PhieuYeuCau.[ID],PhieuYeuCau.[IdSanPham],PhieuYeuCau.[NgayYeuCau],PhieuYeuCau.[NguoiYeuCau],PhieuYeuCau.[SoLuong] as 'SoLuongHuy',PhieuYeuCau.[TrangThai],PhieuYeuCau.[NgayChungTu],PhieuYeuCau.[NgayHoachToan],PhieuYeuCau.[SoChungTu],PhieuYeuCau.[GhiChu],PhieuYeuCau.[SoLuong],PhieuYeuCau.[LoaiPhieu]",
               "WHERE PhieuYeuCau.ID =" + MaID);
            dtNgayLapLenh.Value = Convert.ToDateTime(dt.Rows[0]["NgayLL"]);
            txtSoLuongYeuCau.Text = dt.Rows[0]["SoLuongHuy"].ToString();
            txtSoLuong.Text = dt.Rows[0]["SoLuong"].ToString();
            txtGhiChu.Text = dt.Rows[0]["GhiChu"].ToString();
            dtNgayChungTu.Value = Convert.ToDateTime(dt.Rows[0]["NgayChungTu"]);
            dtNgayHachToan.Value = Convert.ToDateTime(dt.Rows[0]["NgayHoachToan"]);
            txtChungtu.Text = dt.Rows[0]["SoChungTu"].ToString();
            dtSXTuNgay.Value = Convert.ToDateTime(dt.Rows[0]["TuNgay"]);
            dtSXDenNgay.Value = Convert.ToDateTime(dt.Rows[0]["DenNgay"]);
            IdSanPham = dt.Rows[0]["IdSanPham"].ToString();
            txtMaSP.Text = dt.Rows[0]["MaSanPham"].ToString();
            txtLoaiHang.Text = dt.Rows[0]["LoaiHang"].ToString();
            txtLanTai.Text = dt.Rows[0]["LanSanXuat"].ToString();
            txtSoLenh.Text = dt.Rows[0]["LenhSanXuat"].ToString();
            luPhieuYeuCau.EditValue = dt.Rows[0]["LoaiPhieu"];

            DataTable dtPycct = DataAll.SelectAll("PhieuYeuCau_ChiTiet inner join Kho_VatTu on PhieuYeuCau_ChiTiet.IDVatTu = Kho_VatTu.IDVatTu", "PhieuYeuCau_ChiTiet.[ID],PhieuYeuCau_ChiTiet.GhiChu, PhieuYeuCau_ChiTiet.SoLuong,PhieuYeuCau_ChiTiet.IDVatTu as 'Mã vật tư',Kho_VatTu.MaVatTu,Kho_VatTu.TenVatTu,Kho_VatTu.DonVi", "Where IDPhieuYeuCau = " + MaID);

            gridChiTiet.DataSource = null;
            gridChiTiet.DataSource = dtPycct;

            gcTenVatTu.OptionsColumn.AllowFocus = false;
            gcDonVi.OptionsColumn.AllowFocus = false;

            luMaDangAnh.Properties.DataSource = DataAll.SelectAll("Kho_VatTu", "MaVatTu", "");
            luMaDangAnh.Properties.Columns.Add(new LookUpColumnInfo("MaVatTu"));
            luMaDangAnh.Properties.DisplayMember = "MaVatTu";
            luMaDangAnh.Properties.ValueMember = "MaVatTu";
            luMaDangAnh.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;
            luMaDangAnh.Properties.NullText = "--- Chọn ảnh vật tư ---";
            luMaDangAnh.Properties.ShowHeader = false;

            LoadImage();
            if (dt.Rows[0]["TrangThai"].ToString() == Convert.ToInt32(TrangThai.PhieuYeuCau_TaoMoi).ToString()
                || dt.Rows[0]["TrangThai"].ToString() == Convert.ToInt32(TrangThai.PhieuYeuCau_HuyDuyet).ToString())
            {
                //thêm 1 dòng cho lưới chi tiết
                //(gridChiTiet.MainView as GridView).AddNewRow();
                dtPycct.Rows.Add();
                bntLuLai.Visible = true;
                luPhieuYeuCau.Enabled = true;
            }
            else
            {
                gvChiTiet.OptionsBehavior.Editable = false;
                gcXoa.Visible = false;
                gcMaVatTu.OptionsColumn.AllowFocus = false;
                gcSoLuong.OptionsColumn.AllowFocus = false;
                gcGhiChu.OptionsColumn.AllowFocus = false;
                luPhieuYeuCau.Enabled = false;
                bntLuLai.Visible = false;
            }

        }

        private void bntLuLai_Click(object sender, EventArgs e)
        {
            if (!ValidateForm())
            {
                return;
            }
            string soluong = string.Empty;
            if (luPhieuYeuCau.EditValue.ToString() == "2")
                soluong = "0";
            else
                soluong = txtSoLuongYeuCau.Text;

            if (MaID != "0")
            {
                // update
                string update = DataAll.Update("PhieuYeuCau", "SoLuong = " + soluong + ", GhiChu =N'" + txtGhiChu.Text + "',LoaiPhieu=" + luPhieuYeuCau.EditValue + " Where ID =" + MaID);
                if (update.Equals("success"))
                {
                    var dataview = (DataView)gvChiTiet.DataSource;
                    for (int i = 0; i < gvChiTiet.RowCount - 1; i++)
                    {
                        var id_vattu = gcMaVatTu.View.GetRowCellValue(i, "Mã vật tư").ToString();
                        if (string.IsNullOrEmpty(gvChiTiet.GetRowCellValue(i, "ID").ToString()))
                        {
                            DataAll.InsertAll("PhieuYeuCau_ChiTiet", MaID + ","
                           + id_vattu + ","
                           + gcSoLuong.View.GetRowCellValue(i, "SoLuong") + ","
                           + gcGhiChu.View.GetRowCellValue(i, "GhiChu"));
                        }
                        else
                        {
                            DataAll.Update("PhieuYeuCau_ChiTiet", "IDVatTu = " + id_vattu
                                + ", SoLuong = " + gcSoLuong.View.GetRowCellValue(i, "SoLuong")
                                + ",GhiChu=N'" + gcGhiChu.View.GetRowCellValue(i, "GhiChu")
                                + "' Where ID = " + gcSoLuong.View.GetRowCellValue(i, "ID"));
                        }
                    }
                }
                MessageBox.Show("Sửa phiếu thành công", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Close();
            }
            else
            {
                var data = DataAll.SelectCustomer("INSERT INTO [PhieuYeuCau] VALUES('" + IdSanPham + "','"
                        + DateTime.Now.ToString("MM/dd/yyyy") + "','"
                        + Main.UserID + "',"
                        + soluong + ","
                        + Convert.ToInt32(TrangThai.PhieuYeuCau_ChoXuLy) + ",'"
                        + dtNgayChungTu.Value.ToString("MM/dd/yyyy") + "','"
                        + dtNgayHachToan.Value.ToString("MM/dd/yyyy") + "','"
                        + txtChungtu.Text + "',N'"
                        + txtGhiChu.Text + "',"
                        + Convert.ToInt32(PhongBan.PhongCat) + "," + luPhieuYeuCau.EditValue + ") SELECT MAX(ID) FROM PhieuYeuCau");
                string message = "";
                for (int i = 0; i < gvChiTiet.RowCount - 1; i++)
                {
                    var id_vattu = gcMaVatTu.View.GetRowCellValue(i, "Mã vật tư").ToString();
                    //var ma_vattu = (DataRowView)luMaVatTu.GetDataSourceRowByKeyValue(gcMaVatTu.View.GetRowCellValue(i, "Mã vật tư").ToString());
                    message = DataAll.InsertAll("PhieuYeuCau_ChiTiet", data.Rows[0][0] + ","
                         + id_vattu + ","
                         + gcSoLuong.View.GetRowCellValue(i, "SoLuong") + ","
                         + gcGhiChu.View.GetRowCellValue(i, "GhiChu"));
                }

                DataAll.InsertAll("HanhTrinh", txtMaSP.Text
                    + "," + Convert.ToInt32(PhongBan.PhongCat)
                    + "," + txtChungtu.Text
                    + "," + Common.HienThiTrangThai(Convert.ToInt32(luPhieuYeuCau.EditValue.ToString()))
                    + "," + Main.UserID
                    + "," + DateTime.Now.ToString("MM/dd/yyyy")
                    + "," + txtSoLuong.Text
                    + "," + dtSXTuNgay.Value.ToString("MM/dd/yyyy")
                    + "," + dtSXDenNgay.Value.ToString("MM/dd/yyyy"));

                MessageBox.Show("Tạo phiếu thành công!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Close();
            }
        }

        private void gvChiTiet_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.Column.Caption == "Mã vật tư")
            {
                if (e.RowHandle == gvChiTiet.RowCount - 1)
                {
                    (gridChiTiet.MainView as GridView).AddNewRow();
                }
                gvChiTiet.SetRowCellValue(e.RowHandle, gvChiTiet.Columns["SoLuong"], 0);
                var vatTu = (DataRowView)luMaVatTu.GetDataSourceRowByKeyValue(e.Value);
                gvChiTiet.SetRowCellValue(e.RowHandle, gvChiTiet.Columns["TenVatTu"], vatTu.Row.ItemArray[2].ToString());
                gvChiTiet.SetRowCellValue(e.RowHandle, gvChiTiet.Columns["DonVi"], vatTu.Row.ItemArray[3].ToString());
                // check chọn trùng mã vật tư
                var data = (DataView)gvChiTiet.DataSource;
                if (data.Count > 2)
                {
                    for (int i = 0; i < data.Count - 1; i++)
                    {
                        if (i != e.RowHandle)
                        {
                            string a = gvChiTiet.GetRowCellValue(e.RowHandle, "Mã vật tư").ToString();
                            string b = data[i]["Mã vật tư"].ToString();
                            if (a == b)
                            {
                                MessageBox.Show("Vật tư đã được chọn ở dòng thứ: " + (i + 1).ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                (gridChiTiet.MainView as GridView).DeleteRow(e.RowHandle);
                                break;
                            }
                        }
                    }
                }
            }
        }

        private void pbAnh_Click(object sender, EventArgs e)
        {
            XemAnh.MaID = txtMaSP.Text;
            var anh = new XemAnh();
            anh.ShowDialog();
            XemAnh.MaID = "0";
        }

        public void LoadImage()
        {
            var data = DataAll.SelectAll("DkChung_HinhAnh", "*", " WHERE MaAnh='" + txtMaSP.Text.Trim() + "'");
            if (data.Rows.Count > 0)
            {
                var content = (byte[])data.Rows[0]["Anh"]; if (content != null)
                {
                    Image newImage;
                    using (var ms = new MemoryStream(content, 0, content.Length))
                    {
                        ms.Write(content, 0, content.Length);
                        newImage = Image.FromStream(ms, true);
                    }
                    pbAnh.Image = newImage;
                }
                else
                {
                    pbAnh.Image = null;
                }
            }
            else
            {
                MessageBox.Show("Không tìm thấy mã ảnh", "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnDelete_ButtonClick(object sender, ButtonPressedEventArgs e)
        {
            if (gvChiTiet.FocusedRowHandle == gvChiTiet.RowCount - 1)
            {
                return;
            }

            DialogResult dialogResult = MessageBox.Show("Bạn có chắc chắn muốn xóa.", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dialogResult == DialogResult.Yes)
            {
                (gridChiTiet.MainView as GridView).DeleteSelectedRows();
            }
        }

        private bool ValidateForm()
        {
            bool chk = true;
            if (Convert.ToString(luPhieuYeuCau.EditValue) == "3")
            {
                return chk;
            }
            
            if (luPhieuYeuCau.EditValue == null)
            {
                MessageBox.Show("Vui lòng chọn loại phiếu yêu cầu !", "Lỗi nhập dữ liệu", MessageBoxButtons.OK, MessageBoxIcon.Error);
                chk = false;
                return chk;
            }

            if (gvChiTiet.RowCount == 1)
            {
                MessageBox.Show("Vui lòng chọn vật tư !", "Lỗi nhập dữ liệu", MessageBoxButtons.OK, MessageBoxIcon.Error);
                chk = false;
                return chk;
            }
            return chk;
        }

        private void luPhieuYeuCau_Leave(object sender, EventArgs e)
        {
            if (Convert.ToString(luPhieuYeuCau.EditValue) == "3")
            {
                LoadFormInsert();
                gvChiTiet.OptionsBehavior.Editable = false;
            }
            else
            {
                gvChiTiet.OptionsBehavior.Editable = true;
            }
        }

        private void luMaDangAnh_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13 && luMaDangAnh.EditValue != null)
            {
                XemAnh.MaID = luMaDangAnh.EditValue.ToString();
                var anh = new XemAnh();
                anh.ShowDialog();
                XemAnh.MaID = "0";
            }
        }
    }
}
